package com.czy.enums;


import com.czy.util.StringUtil;

import java.util.Arrays;

/**
 * 枚举都要继承此接口，
 *
 * @param <V> 枚举实际值的数据类型
 */
public interface IEnum<V> {
    /*枚举实际值,即枚举序列化后的值*/
    V getValue();
    /*枚举反序列化时使用，即根据传入的字符串和具体枚举类型，得到具体的枚举对象*/
    static <T extends IEnum<TT>,TT> T getBean(String value, Class<T> tClass) {
        if (StringUtil.isBlank(value)) {
            return null;
        }
        return Arrays.stream(tClass.getEnumConstants()).filter(item -> value.equals(item.getStr())).findFirst()
                .orElse(null);
    }
    static <T extends Enum> T getEnum(String value, Class<T> tClass) {
        if (StringUtil.isBlank(value)) {
            return null;
        }
        return Arrays.stream(tClass.getEnumConstants()).filter(item ->
                        value.equals(item.name())).findFirst()
                .orElse(null);
    }

    /*枚举实际值的字符串形式*/
    default String getStr() {
        return String.valueOf(getValue());
    }
    /*此方法没有用，无法加方法体，可用getStr()替代*/
    @Override
    String toString();


}
